<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 定义, 声明
        // 定义: 描述一个实物的特征
        // 声明: 声明一个变量
        // 常规的函数声明
        // function name() {

        // }
        // 匿名函数
        // let name = function() {

        // }

        // 函数调用

        // 2. 作为方法调用
        // let o = {
        //     show() {
        //     }
        // }
        // o.show();
        // 3. 构造函数调用
        // var Person = function() {
        // }
        // console.log(
        //     new Person()
        // )

        // 4. 借用 call, apply
        // var a = [1, 2, 3];
        // a.push('000');
        // console.log(a);
        // var o = {
        //     0: '1-1',
        //     1: '2-1',
        //     2: '3-1',
        //     length: 3,
        // }
        // console.log(
        //     Array.prototype.push
        // )
        // Array.prototype.push.call(o, '000')
        // console.log(o)

        // 方法链
        // var o = {
        //     0: '1-1',
        //     1: '2-1',
        //     2: '3-1',
        //     length: 3,
        //     push(v) {
        //         console.log('push')
        //         this[this.length++] = v
        //         return this
        //     },
        //     pop() {
        //         console.log('pop')
        //         return this
        //     },
        //     del() {
        //         console.log('del')
        //         return this
        //     }
        // }
        // o.push('0000---000').push('111---11').pop().del();
        // console.log(o);

        // 参数
        // function show() {
        //     // 函数体
        //     // arguments.callee  是整个函数的引用
        //     let p1 = arguments[0]
        //     let p2 = arguments[1]
        //     console.log(
        //         arguments
        //     )
        //     // console.log(
        //     //     arguments.callee === show
        //     // )
        // }
        // show()

        // 函数的返回值
        // function sum(a, b) {
            // return 终止函数
            // return 返回执行结果

            // 表单校验
            // // name
            // if ('name-321321'.length < 8) {
            //     alert('用户名不能少于8位');
            //     return
            // }
            // // pwd
            // if ('pwd'.length < 6) {
            //     alert('密码不能少于6位');
            //     return
            // }
            // age
            // 提交

        //     return (a + b);
        // }
        // console.log(
        //     sum(99, 1)
        // )

        // 递归调用
        // var a = [
        //     [1,2,3,4],
        //     [1,2,3,4],
        //     [1,2,3,4]
        // ]
        // var n = []
        // function stretch(arr) {
        //     for (let item of arr) {
        //         if (Array.isArray(item)) {
        //             arguments.callee(item)
        //         } else {
        //             n.push(item);
        //         }
        //     }
        // }
        // stretch(a)
        // console.log(n);
        
        // 函数
        // 函数从哪里来?
        // 是从另一个函数克隆而来
        // function Person() {

        // }
        // stretch.__proto__.Function.__proto__.Object
        // console.log(
            // new Person()
            // stretch.name
            // stretch.prototype
            // stretch.constructor === Function
        // )

    </script>
</body>
</html>